#ifndef __APP_BUFFER_H__
#define __APP_BUFFER_H__

#include "pthread.h"

#define APP_BUFFER_MAX_SIZE 1024

typedef struct
{
    char *data_ptr; // 数据指针
    int data_len;   // 数据长度
    int total_len;  // 总长度
} sub_app_buffer_t; // 子缓冲区结构体

typedef struct
{
    sub_app_buffer_t *sub_buffer[2]; // 子缓冲区指针数组
    int read_index;                  // 读缓冲区下标
    int write_index;                 // 写缓冲区下标
    pthread_mutex_t read_lock;       // 读锁
    pthread_mutex_t swap_lock;       // 交换锁
} app_buffer_t;

/**
 * @brief 创建缓冲区
 * @return 缓冲区指针app_buffer_t*
 */
app_buffer_t *app_buffer_init();

/**
 * @brief 向缓冲区中写入数据
 * @param app_buffer_t* 缓冲区指针
 * @return 0:成功, -1:失败
 */
int app_buffer_write(app_buffer_t *app_buffer, char *write_data, int write_data_len);

/**
 * @brief 从缓冲区中读取数据
 * @param app_buffer_t* 缓冲区指针
 * @param char* 读取数据容器
 * @param int 读取数据容器长度
 * @return int 读取成功返回 实际读取长度, 失败返回-1
 */
int app_buffer_read(app_buffer_t *app_buffer, char *read_data, int read_data_len);

/**
 * @brief 销毁缓冲区
 * @param app_buffer_t* 缓冲区指针
 */
void app_buffer_destroy(app_buffer_t *app_buffer);

#endif /* __APP_BUFFER_H__ */